//给定一个整型数组，在数组中找出由三个数组成的最大乘积，并输出这个乘积。 
//
// 示例 1: 
//
// 
//输入: [1,2,3]
//输出: 6
// 
//
// 示例 2: 
//
// 
//输入: [1,2,3,4]
//输出: 24
// 
//
// 注意: 
//
// 
// 给定的整型数组长度范围是[3,104]，数组中所有的元素范围是[-1000, 1000]。 
// 输入的数组中任意三个数的乘积不会超出32位有符号整数的范围。 
// 
// Related Topics 数组 数学 
// 👍 225 👎 0
#include <iostream>
#include <vector>

using namespace std;


//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public:
    int maximumProduct(vector<int>& nums) {
        sort(nums.begin(),nums.end(),[](int a, int b) {
            return a < b;
        });
        int len = nums.size() , res = 1;
        return max(nums[0]*nums[1]*nums[len-1],nums[len-1]*nums[len-2]*nums[len-3]);
    }
    int maximumProduct_2(vector<int>& nums){
        int min_1 = INT_MAX,min_2 = INT_MAX,max_1 = INT_MIN,max_2 = INT_MIN ,max_3 = INT_MIN;
        for (int num : nums){
            if (num < min_1){
                min_2 = min_1;
                min_1 = num;
            } else if (num < min_2){
                min_2 = num;
            }

            if (num > max_1){
                max_3 = max_2;
                max_2 = max_1;
                max_1 = num;
            } else if (num > max_2){
                max_3 = max_2;
                max_2 = num;
            } else if (num > max_3){
                max_3 = num;
            }
        }
        return max(min_1*min_2*max_1,max_1*max_2*max_3);
    }

};
//leetcode submit region end(Prohibit modification and deletion)
